#include <iostream>
#include "Coordenada.h"
#include "DibujoSVG.h"
using namespace std;

Coordenada::Coordenada(float nx, float ny)
{
	if (nx>=DibujoSVG::MIN_VALOR && nx<=DibujoSVG::MAX_VALOR && ny>=DibujoSVG::MIN_VALOR && ny<=DibujoSVG::MAX_VALOR)
	{
		x=nx;
		y=ny;
	}	
	else {throw ExcepcionCoordenadaErronea(nx,ny);}
}
		
Coordenada::Coordenada(const Coordenada& nc)
{
	x=nc.getX();
	y=nc.getY();
}

Coordenada::~Coordenada()
{
	y=0;
	x=0;	
}

Coordenada& 
Coordenada::operator=(const Coordenada& c)
{
	if (this!=&c)
	{
		x=c.x;
		y=c.y;
	}
	
	return *this;
}

void 
Coordenada::imprimir(ostream& os) const
{
	os<<x<<','<<y;	
}

bool 
Coordenada::operator==(const Coordenada& nc) const
{
	return (nc.x==x && nc.y==y);			
}
		
Coordenada 
Coordenada::operator+(const Coordenada& nc) const
{
	float t=x+nc.x;
	float t2=y+nc.y;
	Coordenada s;
	
	if (t>=DibujoSVG::MIN_VALOR && t<=DibujoSVG::MAX_VALOR && t2>=DibujoSVG::MIN_VALOR && t2<=DibujoSVG::MAX_VALOR)
	{
		s.x=t;
		s.y=t2;
	}	
	else {throw ExcepcionCoordenadaErronea(t,t2);}
	
	return s;
}
Coordenada
Coordenada::operator-(const Coordenada& nc) const 
{
	float t=x-nc.x;
	float t2=y-nc.y;
	Coordenada s;
	
	if (t>=DibujoSVG::MIN_VALOR && t<=DibujoSVG::MAX_VALOR && t2>=DibujoSVG::MIN_VALOR && t2<=DibujoSVG::MAX_VALOR)
	{
		s.x=t;
		s.y=t2;
	}	
	else {throw ExcepcionCoordenadaErronea(t,t2);}
	
	return s;
}

Coordenada
Coordenada::operator*(float nc) const
{
	float t=x*nc;
	float t2=y*nc;
	
	try
	{
		Coordenada s(t,t2);	
		return s;
	}
	catch(ExcepcionCoordenadaErronea &ex)
	{
		cerr<<ex.what();	
	}	
}
ostream& operator<<(ostream& os ,const Coordenada& c)
{
	os<<c.getX()<<','<<c.getY();	
	
	return os;	
}

istream& operator>>(istream& is ,Coordenada& c)
{
	float nx,ny;
	is >> nx >> ny;
	
	if (nx>=DibujoSVG::MIN_VALOR && nx<=DibujoSVG::MAX_VALOR && ny>=DibujoSVG::MIN_VALOR && ny<=DibujoSVG::MAX_VALOR)
	{
		nx=nx;
		ny=ny;
	}	
	else {throw ExcepcionCoordenadaErronea(nx,ny);}
	
	
	return(is);
}

